﻿using EGuayas.Web.Resources;
using EntGuayasSLA.BL;
using EntGuayasSLA.BL.Listas;
using EntGuayasSLA.BL.Listas.Criterias;
using Ext.Net;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace EGuayas.Web.Auditoria.Admin.Cumplimiento
{
    public partial class wucFases : ucWuc
    {
        protected String PageId
        {
            get
            {
                return ReadCustomConfigPage(this.pnlFases, this.ID);
            }

        }
        protected string AuditoriaCumplientoId
        {
            get
            {
               string strValReturn= this.hddIdCumplimiento.Value.ToString();
               return strValReturn;
            }
           
        }
        protected List<FaseAuditoriaCumplimientoInfo> FaseCreadas
        {
            get
            {
                if (Session["wucInformeDocFaseAuditor" + this.ID] == null)
                {
                    Session["wucInformeDocFaseAuditor" + this.ID] = new List<FaseAuditoriaCumplimientoInfo>();
                }
                return ((List<FaseAuditoriaCumplimientoInfo>)Session["wucInformeDocFaseAuditor" + this.ID]);
            }
            set
            {
                Session["wucInformeDocFaseAuditor" + this.ID] = value;
            }
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                if (!this.IsPostBack)
                {
                    switch (GetSessionUsuario.UsuarioRolCodigo)
                    {

                        case Valores.Codigo_Rol_Promotor:
                                this.gpFases.SelectionModel.Clear();
                                this.gpFases.Render();
                                this.btnEnviarFases.Hide();
                                break;
                        default:
                           
                                if (AuditoriaCumplientoId != "")
                                {
                                    FaseAuditoriaCumplimientoLista itemsSelect = FaseAuditoriaCumplimientoLista.GetFaseAuditoriaCumplimientoLista((AuditoriaCumplientoId));

                                    RowSelectionModel sm = this.gpFases.GetSelectionModel() as RowSelectionModel;
                                    foreach (var item in itemsSelect)
                                    {
                                        string recordKey = item.IdAuditoriaCump.ToString();
                                        sm.SelectedRows.Add(new SelectedRow(recordKey));
                                    }
                                }
                                else
                                {
                                    //Selecionar todas las fases por defecto
                                    FaseAuditoriaCumplimientoLista itemsSelect = FaseAuditoriaCumplimientoLista.GetFaseAuditoriaCumplimientoLista();

                                    RowSelectionModel sm = this.gpFases.GetSelectionModel() as RowSelectionModel;
                                    foreach (var item in itemsSelect)
                                    {
                                        string recordKey = item.IdAuditoriaCump.ToString();
                                        sm.SelectedRows.Add(new SelectedRow(recordKey));
                                    }
                                    this.btnEnviarFases.Disable();
                                }
                                break;
                    }
                }
            }
            catch (Exception ex)
            {
                RegistrarLog("wucFases.Page_Load" + ex);
            }
          
        }
        public void EnabledBtnNuevoFase(string idAuditoriaCump)
        {
            try
            {
                string name = this.ID + "_aud";//this.ID + "_aud"
                UpdateCustomConfig(this.pnlFases,name,idAuditoriaCump);
                this.hddIdCumplimiento.SetValue(idAuditoriaCump);
                this.btnEnviarFases.Show();
                this.btnEnviarFases.Enable();
            }
            catch (Exception ex)
            {
                RegistrarLog("wucFases.EnabledBtnNuevoFase" + ex);
            }
        }
        public void HidenBtnNuevoFase(Boolean varHiden)
        {
            try
            {
                this.btnEnviarFases.Enable();
                if(varHiden)
                    this.btnEnviarFases.Hide();
                else   
                    this.btnEnviarFases.Show();
            }
            catch (Exception ex)
            {
                RegistrarLog("wucFases.HidenBtnNuevoFase" + ex);
            }
          
        }
      
        [DirectMethod(IDAlias = "WucInformeDocAud")]
        public FaseAuditoriaCumplimientoLista BindDataArchivos(string action, Dictionary<string, object> extraParams)
        {
            FaseAuditoriaCumplimientoLista itemsReturn = null;
            try
            {           
                    if (GetSessionUsuario.UsuarioRolCodigo == Valores.Codigo_Rol_Promotor)
                    {
                        itemsReturn = FaseAuditoriaCumplimientoLista.GetFaseAuditoriaCumplimientoLista((AuditoriaCumplientoId));
                    }
                    else
                    {
                        //
                        List<FaseAuditoriaCumplimientoInfo> idFases = new List<FaseAuditoriaCumplimientoInfo>();
                        if (AuditoriaCumplientoId != "")//Comprobar!="" por Guid.Parse
                        {
                            FaseAuditoriaCumplimientoLista itemsSelect = FaseAuditoriaCumplimientoLista.GetFaseAuditoriaCumplimientoLista((AuditoriaCumplientoId));
                            int iCountFase = 0;
                            foreach (FaseAuditoriaCumplimientoInfo item in itemsSelect)
                            {
                                iCountFase = FaseAuditoria.ValidarFase(item.IdAuditoriaCump.ToString());
                                if (iCountFase != 0)
                                {
                                    idFases.Add(item);
                                }
                            }
                        }
                        FaseCreadas = idFases;
              
                        //
                        List<string> txtIdsArray = new List<string>();
                        itemsReturn = FaseAuditoriaCumplimientoLista.GetFaseAuditoriaCumplimientoLista();
                        foreach (FaseAuditoriaCumplimientoInfo item in itemsReturn)
                        {
                            FaseAuditoriaCumplimientoInfo itemToRemove = idFases.SingleOrDefault(r => r.IdAuditoriaCump == item.FaseId);
                            if (itemToRemove != null)
                            {
                                txtIdsArray.Add(item.FaseId.ToString());
                            }                           
                        }
                        X.Js.Call("wucJsFases.AddIdsNew", txtIdsArray);

                    }
           
            }
            catch (Exception ex)
            {
                RegistrarLog("wucFases.BindDataArchivos" + ex);
            } 
            return itemsReturn;

        }
        protected void btnAceptar_Click(object sender, DirectEventArgs e)
        {
            try
            {
                string msgInfo = "Fases creadas";
                string jsonValSelect = e.ExtraParams["SelectedValues"];
                string jsonVal = e.ExtraParams["Values"];

                List<FaseAuditoriaCumplimientoInfo> itemsFasesTotal = new List<FaseAuditoriaCumplimientoInfo>();
                List<FaseAuditoriaCumplimientoInfo> itemsFasesCheck = new List<FaseAuditoriaCumplimientoInfo>();

                Dictionary<string, string>[] valselect = JSON.Deserialize<Dictionary<string, string>[]>(jsonValSelect);

                foreach (Dictionary<string, string> row in valselect)
                {
                    FaseAuditoriaCumplimientoInfo item = new FaseAuditoriaCumplimientoInfo(row["FaseId"], row["NombreFase"], row["EstadoFase"], row["CodigoFase"], row["Id"]);
                    itemsFasesCheck.Add(item);
                }
                
                Dictionary<string, string>[] valglobal = JSON.Deserialize<Dictionary<string, string>[]>(jsonVal);
                foreach (Dictionary<string, string> row in valglobal)
                {
                    FaseAuditoriaCumplimientoInfo item = new FaseAuditoriaCumplimientoInfo(row["FaseId"], row["NombreFase"], row["EstadoFase"], row["CodigoFase"], row["Id"]);
                    itemsFasesTotal.Add(item);
                }

                //Obtener fases sin selecionar
                foreach (FaseAuditoriaCumplimientoInfo itemChek in itemsFasesCheck)
                {
                    var itemToRemove = itemsFasesTotal.SingleOrDefault(r => r.FaseId== itemChek.FaseId);
                    if (itemToRemove != null)
                        itemsFasesTotal.Remove(itemToRemove);
                }

                //Fases selecionadas no creadas
                foreach (FaseAuditoriaCumplimientoInfo itemChek in FaseCreadas)
                {
                    var itemToRemove = itemsFasesCheck.SingleOrDefault(r => r.FaseId == itemChek.FaseId);
                    if (itemToRemove != null)
                        itemsFasesCheck.Remove(itemToRemove);
                }
                foreach (FaseAuditoriaCumplimientoInfo row in itemsFasesCheck)
                {

                            FaseAuditoria objFase = FaseAuditoria.NewEditableRoot();
                            objFase.Id = System.Guid.NewGuid();                         
                            objFase.FaseId = row.FaseId.ToString();
                            objFase.AuditoriaCumplimientoId = AuditoriaCumplientoId;
                            objFase.FechaInicial = DateTime.Now;
                            objFase.EstadoFase = Valores.Codigo_Estado_Fase_Proceso;
                            objFase.Save();
                       
                }
                foreach (FaseAuditoriaCumplimientoInfo row in itemsFasesTotal)
               {

                   FaseAuditoria objFase = FaseAuditoria.GetEditableRoot(row.IdAuditoriaCump, Guid.Parse(AuditoriaCumplientoId));
                   if (objFase.FaseId != "")
                   {
                       objFase.Delete();
                       objFase.Save();
                   }
               }
                X.Msg.Show(new MessageBoxConfig() { Message = msgInfo, Title = Titulos.TituloAviso, Buttons = MessageBox.Button.OK, Icon = MessageBox.Icon.INFO });
                this.btnEnviarFases.Disabled = true; 
               
            }
            catch (Exception ex)
            {
                RegistrarLog("wucFases.btnAceptar_Click" + ex);
            }

        }
    }
}